package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysPositionTemp;
import com.ruoyi.common.core.domain.entity.SysPost;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.compensationManagement.domain.CompensationSalarySetting;
import com.ruoyi.compensationManagement.domain.PositionSettings;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 系统共用获取 服务层
 *
 * @author zy
 */
public interface ISysCommonService {
    //根据部门id获取部门名称
    public String getDeptName(Long deptId);

    //根据用户id获取用户部门id
    public Long getDeptIdByUserId(Long userId);

    //根据用户id查用户对象
    public SysUser getSysUserByUserId(Long userId);

    //根据用户id获取用户昵称（名字）
    public String getUserName(Long userId);

    //根据用户id获取出生日期
    public Date getBirthdDay(Long userId);

    //根据用户id获取用户部门名称
    public String getDeptNameByUserId(Long userId);

    //根据用户id获取人员类别
    public String getPersonnelCategoryByUserId(Long userId);

    //根据用户id获取岗位类别
    public String getUserPositionByUserId(Long userId);

    //根据用户id获取岗位等级薪资信息
    public PositionSettings getPositionSettingsByUserId(Long userId);

    //根据user表中的薪级id获取薪级信息
    public CompensationSalarySetting getCompensationSalarySettingByPayId(Long userId);

    //查询下拉菜单人员类型
    public List<String> getRoleName();

    //查询下拉菜单岗位类别
    public List<String> getPostName();

    //查询下拉菜单用印批准人(菜单权限查询)
    public List<Map<String, Object>> getSealMsterList();

    //根据菜单权限查询当前员工所在科室的科室负责人（用印审核用）
    public List<Map<String, Object>> getSealDeptMaster(Long deptId);

    //获取员工转正时间
    public Date getEmploymentConfirmationTime(Long userId);

    //获取员工合同到期时间
    public Date getContractEndTime(Long userId);

    /**
     * 构建前端所需要树结构
     *
     * @param position 岗位列表
     * @return 树结构列表
     */
    public List<SysPositionTemp> buildPositionTree(List<SysPositionTemp> positions);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param position 岗位列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildPositionTreeSelect(List<SysPositionTemp> positions);

    public List<SysPositionTemp> selectDeptList();

    //查岗位类型父节点
    public List<SysPositionTemp> selectPositionType();

    //根据岗位类型获取岗位等级选项（子节点）
    public List<SysPositionTemp> getPositionLevelOption(Long positionIds);

    //根据用户id查用户岗位类型
    public SysPositionTemp selectPositionByUserId(Long userId);

    //根据用户id查用户岗位级别
    public SysPositionTemp selectPositionLevelByUserId(Long userId);

    public List<SysPositionTemp> getPositionLevelOptions();

    public String getNickNameByJobNumber(String jobNumber);

    //根据用户id查用户职位
    public SysPost selectPostByUserId(Long userId);

    //查下拉职务类型下拉列表
    public List<SysPost> selectPostType();
}
